package com.lhz.services;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.lhz.dao.ArrangeTableDao;
import com.lhz.dao.DiningTableDao;
import com.lhz.dao.DuiLieDao;
import com.lhz.dao.mybatis.ArrangeTableMybatis;
import com.lhz.pojos.Appointment;
import com.lhz.pojos.DiningTable;
import com.lhz.pojos.Duilie;

@Service
@Transactional
public class ArrangeTableService {
	/**
	 *                 _ooOoo_
	 *                o8888888o
	 *                88" . "88
	 *                (| -_- |)
	 *                O\  =  /O
	 *             ____/`---'\____
	 *           .'  \\|     |//  `.
	 *          /  \\|||  :  |||//  \
	 *         /  _||||| -:- |||||-  \
	 *         |   | \\\  -  /// |   |
	 *         | \_|  ''\---/''  |   |
	 *         \  .-\__  `-`  ___/-. /
	 *       ___`. .'  /--.--\  `. . __
	 *    ."" '<  `.___\_<|>_/___.'  >'"".
	 *   | | :  `- \`.;`\ _ /`;.`/ - ` : | |
	 *   \  \ `-.   \_ __\ /__ _/   .-` /  /
	 *====`-.____`-.___\_____/___.-`____.-'======
	 *                 `=---='
	 *^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
	 *             佛祖保佑       永无BUG
	 */
	
	@Autowired
	private ArrangeTableMybatis mybatis;
	
	@Autowired
	DuiLieDao duiliejpadao;//列表
	
	@Autowired
	DiningTableDao diningjpadao;//餐桌
	
	@Autowired
	ArrangeTableDao arrjpadao;//预约
	
	/**
	 * 显示预约界面所有信息
	 * @return
	 */
	public Map<String, Object> searchByArrangeTable(
			int pageNow,int pageSize){
		Map<String, Object> map=new HashMap<>();
		PageHelper.startPage(pageNow, pageSize, true);
		List<Appointment> info = mybatis.arrangeTableInfo();
		PageInfo<Appointment> page=new PageInfo<>(info);
		if(info!=null) {
			map.put("list", info);
			map.put("total",page.getTotal());
			map.put("pageNow", pageNow);
		}else {
			map.put("message", "没有找到预约相关信息哟!..61");
		}
		return map;
	}	
	
	/**
	 * 条件查询
	 * @param pageNow
	 * @param pageSize
	 * @param number
	 * @param phone
	 * @return
	 */
	public Map<String, Object> searchByArrangeTable(
			int pageNow,int pageSize,
			String number,String phone,
			String startTime){
		Map<String, Object> map=new HashMap<>();
		if(number!=null||phone!=null) {
			PageHelper.startPage(pageNow, pageSize, true);
			List<Appointment> info = mybatis.arrangeTableInfo(number, phone,startTime);
			PageInfo<Appointment> page=new PageInfo<>(info);
			if(info!=null) {
				map.put("list", info);
				map.put("total",page.getTotal());
				map.put("pageNow", pageNow);
				return map;
			}else {
				map.put("message", "没有找到预约相关信息哟!..");
			}
		}else {
			throw new RuntimeException("没有相关查询信息在91行....");
		}
		return map;
	}
	
	/**
	 * 制定用户排队
	 * @param aptId
	 * @param renshu
	 * @return
	 */
	public Map<String,Object> updateStatsArrangeTable(Integer aptId,Integer renshu){
		Map<String,Object> map=new HashMap<>();
		//人数判断
		if(aptId!=null||renshu!=null) {
				if(renshu>0&&renshu<13) {
			String two="";
				if(1<=renshu&&2>=renshu) two="A";//查询两人
				if(2<renshu&&4>=renshu) two="B";//查询四人
				if(4<renshu&&8>=renshu) two="C";//查询八人
				if(8<renshu&&12>=renshu) two="D";//查询十二人
				updatebasestatus(map,aptId, renshu, two);
				}else {
					map.put("result", "人数太多供不应求啊!...");
					return map;
				}
		}
		return map;
	}
	/**
	 * 制定用户排队
	 * @param aptId
	 * @param renshu
	 * @param two
	 * @return
	 */
	public Map<String,Object> updatebasestatus(Map<String,Object> map,Integer aptId,Integer renshu,String two) {
		Appointment yuyue = arrjpadao.findByAptId(aptId);
		if(aptId==null||renshu==null||two==null) {
			map.put("message", "没有找到必填参数!");
			return map;
		}
		Appointment id = arrjpadao.findByAptId(aptId);
		//获取到又没有餐桌呢？
		String tableName = id.getTableName();
		Integer max = mybatis.searchByduilieInfoMax(two);
		if(max==null) {
			Duilie setupdate = setupdate(aptId, two, 0,  0);
			yuyue.setStatus(1);//已排队
			map.put("result", "已帮你排到"+max+"位");
			duiliejpadao.save(setupdate);
			return map;
		}
				Integer a=1;//正在使用
				//餐桌里面的状态
				DiningTable tableName2 = diningjpadao.findByTableName(tableName);
					if(tableName2!=null) {
						if(tableName2.getType().equals(two)) {
							tableName2.setStatus(a);
							yuyue.setStatus(2);//已排队
							yuyue.setTableName(tableName2.getTableName());
	 						//System.err.println("AAAAAAAAAAAAAA"+yuyue.getTableName());
							map.put("result", "你在"+yuyue.getTableName()+"桌子");//返回餐桌名
							return map;
						}
					}else {
						Duilie setupdate = setupdate(aptId, two, 0, max);
						yuyue.setStatus(1);//已排队
						duiliejpadao.save(setupdate);
						map.put("result","你已经排在第"+max+"位");
						return map;
					}
			return map;
	}
	/**
	 * 制定用户排队
	 * @param aptId
	 * @param two
	 * @param type
	 * @param max
	 * @return
	 */
	public Duilie setupdate(Integer aptId,String two,Integer type,Integer max) {
		Duilie duilie=new Duilie();
		duilie.setNAptId(aptId);
		duilie.setTableType(two);
		duilie.setType(0);//0预约 1未预约
		duilie.setShunxu(max+1);//顺序来排队
		return duilie;
	}
	
	
	
}
